#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+5,P=147744151;
char buf[(1<<21)+5],*p1,*p2;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline int read(){
	int f=0,x=0;
	char ch=getchar();
	while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
	return f?-x:x;
}
int n,m,mod,Q,sum[N][N],inv[N][N],answer;
int ksm(int x,int y){
	int res=1;
	while(y){
		if(y&1) res=(res*x)%mod;
		x=(x*x)%mod;
		y>>=1;
	}
	return res;
}
bool check(int x){
	for(int i=2;i*i<=x;i++)
		if(x%i==0) return false;
	return true;
}
signed main(){
	freopen("tsuki.in","r",stdin);
	freopen("tsuki.out","w",stdout);
	n=read(),m=read(),mod=read();
	for(int i=0;i<=n;i++) sum[i][0]=inv[i][0]=1;
	for(int i=0;i<=m;i++) sum[0][i]=inv[0][i]=1;
	if(check(mod)){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				sum[i][j]=read();
				sum[i][j]=(sum[i][j]*sum[i-1][j]%mod*sum[i][j-1]%mod*inv[i-1][j-1])%mod;
				inv[i][j]=ksm(sum[i][j],mod-2)%mod;
			}
		}
		Q=read();
		for(int i=1;i<=Q;i++){
			int x_1=read(),y_1=read();
			int x_2=read(),y_2=read();
			int ans=sum[x_2][y_2]*sum[x_1-1][y_1-1]%mod*inv[x_2][y_1-1]%mod*inv[x_1-1][y_2]%mod;
			answer=(answer+(ans^i))%P;
		}
		printf("%lld",answer);	
	}
	else{
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				sum[i][j]=read();
		Q=read();
		for(int i=1;i<=Q;i++){
			int x_1=read(),y_1=read();
			int x_2=read(),y_2=read();
			int ans=1;
			for(int i=x_1;i<=x_2;i++)
				for(int j=y_1;j<=y_2;j++)
					ans=(ans*sum[i][j])%mod;
			answer=(answer+(ans^i))%P;
		}
		printf("%lld",answer);			
	} 
	return 0;
}
